package br.com.datasun.biblioteca.facade;

import java.util.List;

import br.com.datasun.biblioteca.business.AssuntoBO;
import br.com.datasun.biblioteca.business.AutorBO;
import br.com.datasun.biblioteca.business.BibliotecaBO;
import br.com.datasun.biblioteca.business.CategoriaBO;
import br.com.datasun.biblioteca.business.EditoraBO;
import br.com.datasun.biblioteca.business.EstadoBO;
import br.com.datasun.biblioteca.business.ExemplarBO;
import br.com.datasun.biblioteca.business.LivroBO;
import br.com.datasun.biblioteca.business.PessoaFisicaBO;
import br.com.datasun.biblioteca.entities.Assunto;
import br.com.datasun.biblioteca.entities.Autor;
import br.com.datasun.biblioteca.entities.Biblioteca;
import br.com.datasun.biblioteca.entities.Categoria;
import br.com.datasun.biblioteca.entities.Editora;
import br.com.datasun.biblioteca.entities.Estado;
import br.com.datasun.biblioteca.entities.Exemplar;
import br.com.datasun.biblioteca.entities.Livro;
import br.com.datasun.biblioteca.entities.PessoaFisica;
import br.com.datasun.biblioteca.exceptions.BusinessException;
import br.com.datasun.biblioteca.exceptions.ExemplarBibliotecaNaoInformadaException;
import br.com.datasun.biblioteca.exceptions.ExemplarIdInvalidoException;
import br.com.datasun.biblioteca.exceptions.ExemplarIndisponivelException;
import br.com.datasun.biblioteca.exceptions.ExemplarInexistenteException;
import br.com.datasun.biblioteca.exceptions.ExemplarLivroNaoInformadoException;

public class ConsultasFacade {
	private AssuntoBO assuntoBO = new AssuntoBO();
	private EditoraBO editoraBO = new EditoraBO();
	private BibliotecaBO bibliotecaBO = new BibliotecaBO();
	private EstadoBO estadoBO = new EstadoBO();
	private LivroBO livroBO = new LivroBO();
	private PessoaFisicaBO clienteBO = new PessoaFisicaBO();
	private ExemplarBO exemplarBO = new ExemplarBO();
	private CategoriaBO categoriaBO = new CategoriaBO();
	private AutorBO autorBO = new AutorBO();     
	
	public List<Assunto> listarTodosAssuntos() throws BusinessException{
		return assuntoBO.listarTodos();
	}
	
	public List<Editora> listarTodasEditoras() throws BusinessException{
		return editoraBO.listarTodos();
	}
	
	public List<Biblioteca> listarTodasBibliotecas() throws BusinessException{
		return bibliotecaBO.listarTodas();
	}
	
	public List<Estado> listarTodosEstadosComCidades () throws BusinessException{
		return estadoBO.listarTodosEstadosComCidades();
	}
	
	public List<Livro> listarTodosLivros() throws BusinessException{
	  return livroBO.listarTodos();
	}
	
	public List<PessoaFisica> listarTodosClientes() throws BusinessException{
	  return clienteBO.listarTodos();
	}
	
	public List<PessoaFisica> consultarClientes(String nNome, String nEmail,String nCPF,String nRG) throws BusinessException{
		  return clienteBO.consultaPessoaFisica(nNome, nEmail, nCPF, nRG);
		}	
	
	public Exemplar getExemplarPorId(Long idExemplar) throws BusinessException, ExemplarInexistenteException,ExemplarIndisponivelException{
		return exemplarBO.getExemplarPorId(idExemplar);
	}
	
	public Exemplar getExemplarPorId(String idExemplar) throws BusinessException, ExemplarInexistenteException,ExemplarIndisponivelException, ExemplarIdInvalidoException{
		return exemplarBO.getExemplarPorId(idExemplar);
	}
	
	public List<Exemplar> listarTodosExemplaresPorLivroEBiblioteca(Livro livro, Biblioteca biblioteca)throws BusinessException, ExemplarLivroNaoInformadoException,ExemplarBibliotecaNaoInformadaException{
		return exemplarBO.listarTodosExemplaresPorLivroEBiblioteca(livro, biblioteca);
	}
	
	public List<Exemplar> listarTodosExemplaresPorLivro(Livro livro)throws BusinessException, ExemplarLivroNaoInformadoException{
		return exemplarBO.listarTodosExemplaresPorLivro(livro);
	}
	
	public List<Livro> listarLivrosCom(String isbn , String titulo, String autor,String editora, String assunto, String categoria )throws BusinessException {
		return  livroBO.listarLivrosCom( isbn , titulo, autor, editora, assunto,categoria);
	}
	
	public List<Categoria> listarTodasCategorias() throws BusinessException{
		return categoriaBO.listarTodas();
	}

	public List<Autor> listarAutoresDisponiveis(Long idAutor) throws BusinessException{
		return autorBO.listarAutoresDisponiveis(idAutor);
	}
}
